<?php
class respuCompara {

	/**
	 * @var string
	 */
	public $total;

	/**
	 * @var array of vuelo
	 */
	public $lVuelos;
	
	/**
	 * @var array of pasajero
	 */
	public $lPasajeros;
}

class vuelo {

    /**
     * @var string
     */
    public $vuelo;

    /**
     * @var string
     */
    public $origen;
    
    /**
     * @var string
     */
    public $destino;
    
    /**
     * @var string
     */
    public $fechaSalida;
    
    /**
     * @var string
     */
    public $fechaLlegada;
       
}

class pasajero {

	/**
	 * @var string
	 */
	public $nombre;
	
	/**
	 * @var string
	 */
	public $apellido;
	
	/**
	 * @var string
	 */
	public $clase;
	
	/**
	 * @var string
	 */
	public $tipo;
	
}

function buscarReserva($input) {
	require_once '../clases/Security.php';
	require_once '../clases/ConnectPoint_Pricing.php';
	require_once 'clases.php';
	global $db,$wsdlopt;
	global $Usuario, $GCP;
	$Usuario = $input->usuario;
	$GCP = $input->gcp;
	$db = conectaDB();
	$numpnr = array();
	mensajeAma($Usuario,$GCP,"Buscando reservas");
	$resp = new buscarReservaResponse();
	Debug(0, "Buscando Reserva " . $input->numeroReserva . "-");
	$input->numeroReserva .= "";
	if($input->numeroReserva != "") {
		$numpnr[$input->numeroReserva] = $input->numeroReserva;
	} else {
		$input->nombre .= "";
		$input->apellido .= "";
		$input->documento .= "";
		$input->gcp .= "";
		if ($input->nombre === "" && $input->apellido == "" && $input->documento == "" && $input->gcp == "") {
			$resp->response = "NOK: ningun criterio de busqueda especificado";
			return $resp;
		}
		$query = "SELECT PNR FROM refPNR WHERE ";
		if ($input->nombre !== "")
			$query .= "nombre like '{$input->nombre}' AND ";
		if ($input->apellido !== "")
			$query .= "apellido like '{$input->apellido}' AND ";
		if ($input->documento !== "")
			$query .= "documento like '{$input->documento}' AND ";
		if ($input->gcp !== "") {
			$query .= "gcp like '{$input->gcp}'";
		} else 
			$query = substr($query, 0, -4);// quita el ultimo and
		if (!$res = mysql_query($query, $db)) {
			Debug(0, "Error al ejecutar get PNR: $query " . mysql_error($db));
			$resp->response = "NOK: Error de base de datos";
			return $resp;
		}
		$numen = 0;
		while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
			$numpnr[$row["PNR"]] = $row["PNR"];
			$numen++;
		}
		if ($numen == 0) {
			$resp->response = "NOK: PNR no encontrado";
			return $resp;
		}
	}
	$nump = 0;
	foreach ($numpnr as $pnr) {
		$query = "SELECT reserva,confirma,amadeus,estado,fechaCreacion,reservaJson FROM PNR WHERE codigo='{$pnr}'";
		if (!$res1 = mysql_query($query, $db)) 
			Debug(0, "Error al ejecutar get PNR: $query " . mysql_error($db));
		$rowp = mysql_fetch_array($res1, MYSQL_ASSOC);
		
		$rese1 = json_decode($rowp["reservaJson"]);
		Debug(0, "RESERVA_____ANTES DE MODIFICAR____ " . vard($rese1));
		$rese1= modificarReserva($pnr,$rese1);
		Debug(0, "RESERVA____DESPUES DE MODIFICAR_____ " . vard($rese1));
		$resp->reserva[$nump]->estado = $rowp["estado"];
		$resp->reserva[$nump]->totalFare = $rese1->totalFare;
		$resp->reserva[$nump]->return = $rese1->return;
		$resp->reserva[$nump]->invoice = $rese1->invoice;
		$resp->reserva[$nump]->flights = $rese1->flights;
		$resp->reserva[$nump]->fechareserva = $rowp["fechaCreacion"];
		Debug(0, "Encontrada Reserva: $pnr estado:" . $rowp["estado"]);
		if ($rowp["estado"] >= 1) {
			$rese2 = unserialize($rowp["confirma"]);
			if ($rese2 == NULL)
				$resp->reserva[$nump]->passangers = $rese1->passangers;
			 else 
				$resp->reserva[$nump]->passangers = $rese2->tickets;
		} else {
			$resp->reserva[$nump]->passangers = $rese1->passangers;
		}
		Debug(0, "RESERVA " . vard($resp->reserva[$nump]));
		// getlistcarriers($resp->reserva[$nump]);
		// obtiene los comentarios del PNR
		// $apnr = unserialize($rowp["amadeus"]);
		// Debug(0, "AMA " . vard($apnr));
		$nump++;
	}
	$resp->response = "OK";
	// Debug(0, "Buscando Reserva Resp" . vard($resp) . "-");
	//print_r($resp);
	return $resp;
}

function modificarReserva($nump,$rese1) {
	//require_once '../clases/Security.php';
	//require_once '../clases/ConnectPoint_Pricing.php';
	//global $db,$wsdlopt;
	$datosPNRRadixx=array();
	//$datosPNRBD=array();
	$compaArma=array();
	$datosPNRRadixx=extraeDatosRetrievePNR($nump);
	echo "<pre>RADIXXX";
	print_r($datosPNRRadixx);
	echo "</pre>";
	echo "<pre>BASE ORIGINAL";
	//print_r($rese1);
	echo "</pre>";
	$compaArma=comparaArmaDatos($datosPNRRadixx,$rese1);
	echo "<pre>COMPARA Y ARMA";
	print_r($compaArma);
	echo "</pre>";
	//$query = "UPDATE PNR SET reservaJson='".json_encode($compaArma)."' WHERE codigo='".$pnr."'";
	//mysql_query($query, $db);
	return $compaArma;
}

function extraeDatosRetrievePNR($nroEticket){
	$sec=new Security();
	$session = new Session();
	$resps=$sec->get_radixx_session($session,false,"create");
	$reqob=array(
			'RetrievePnrRequest' => array(
					'SecurityGUID' => $session->SecurityToken,
					'CarrierCodes' => array(
							'CarrierCode' => array(
									'AccessibleCarrierCode' => 'A4'
							)
					),
					'ActionType' => 'GetReservation',
					'ReservationInfo' => array(
							'SeriesNumber' => '299',
							'ConfirmationNumber' => $nroEticket
					),
			)
	);
	$client=new ConnectPoint_Security("http://a4.connectpoint.uat.radixx.com/ConnectPoint.Reservation.svc?wsdl", array(
			'soap_version' => SOAP_1_1,
			'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
			'cache_wsdl' => 1,
			'trace' => 1
	));
	try {
		$retrievePNR = $client->RetrievePNR($reqob)->RetrievePNRResult;
		echo "<pre>---------RADIXXX-----------";
		print_r($retrievePNR);
		echo "</pre>";
		$result=new respuCompara;
		$result->total=$retrievePNR->ReservationBalance;
		$vuelo=$retrievePNR->Airlines->Airline[0]->LogicalFlight->LogicalFlight;
		$flagPasa=true;
		$nroVuelo=count($vuelo)-1;
		for($i=$nroVuelo;$i>=0;$i--){
			$unVuelo=$vuelo[$i]->PhysicalFlights->PhysicalFlight[0];
			$resp=new vuelo;
			$resp->vuelo=$unVuelo->FlightNumber;
			$resp->origen=$unVuelo->Origin;
			$resp->destino=$unVuelo->Destination;
			$resp->fechaSalida=$unVuelo->DepartureTime;
			$resp->fechaLlegada=$unVuelo->Arrivaltime;
			if($flagPasa){
				$pasajerosRadixx=$unVuelo->Customers->Customer[0]->AirlinePersons->AirlinePerson;
				$maxPas=count($pasajerosRadixx);
				for($j=0;$j<$maxPas;$j++){
					$ind=$pasajerosRadixx[$j]->RecordNumber;
					$pax=new pasajero;
					$pax->nombre=$pasajerosRadixx[$j]->FirstName;
					$pax->apellido=$pasajerosRadixx[$j]->LastName;
					$pax->clase=$pasajerosRadixx[$j]->FareClassCode;
					$tip=$pasajerosRadixx[$j]->PTCID;
					switch($tip){
						case "1":$pax->tipo="0";break;
						case "5":$pax->tipo="2";break;
						case "6":$pax->tipo="1";break;
						default:$pax->tipo="";break;
					}
					$result->lPasajeros[$maxPas-$ind]=$pax; //$ind-1
				}
				$flagPasa=false;
			}	
			$result->lVuelos[]=$resp;	
		}
	}
	catch(Exception $ex) {
		echo "<pre>";
		print_r($ex);
		echo "</pre>";
	}
	return $result;
}

function comparaArmaDatos($datosPNRRadixx,$reserva){
	if(count($datosPNRRadixx)>0){
		$flagCambOrgDes=false;
		if($datosPNRRadixx->total!=$reserva->totalFare){  //Dominante RADIXX
			$reserva->totalFare=$datosPNRRadixx->total;
			if($datosPNRRadixx->total=="0"){
				$db = conectaDB();//se cambia el estado del eticket cuando Radixx lo anula
				$query = "UPDATE PNR SET estado='6' WHERE codigo='".$reserva->passangers[0]->reservationNumber."'";
				mysql_query($query, $db);
			}
		}
		for($i=0;$i<count($reserva->flights);$i++){
			if($datosPNRRadixx->lVuelos[$i]->vuelo!=$reserva->flights[$i]->connection[0]->fligthNumber)  //Dominante RADIXX
				$reserva->flights[$i]->connection[0]->fligthNumber=$datosPNRRadixx->lVuelos[$i]->vuelo;
			if(($datosPNRRadixx->lVuelos[$i]->origen)!=($reserva->flights[$i]->connection[0]->airportOriginCode)){  //Dominante RADIXX
				$reserva->flights[$i]->connection[0]->airportOriginCode=$datosPNRRadixx->lVuelos[$i]->origen;
				$res=decodeciudad($datosPNRRadixx->lVuelos[$i]->origen);
				$reserva->flights[$i]->connection[0]->airportOriginName=$res[1];
				$flagCambOrgDes=true;
			}
			//if($datosPNRRadixx->lVuelos[$i]->destino!=$reserva->flights[$i]->connection[0]->airportDestinationCode){  //Dominante RADIXX
			if($datosPNRRadixx->lVuelos[$i]->destino!=$reserva->flights[$i]->connection[0]->airportDestinationCode){  //Dominante RADIXX
				$reserva->flights[$i]->connection[0]->airportDestinationCode=$datosPNRRadixx->lVuelos[$i]->destino;
				$res=decodeciudad($datosPNRRadixx->lVuelos[$i]->destino);
				$reserva->flights[$i]->connection[0]->airportDestinationName=$res[1];
				$flagCambOrgDes=true;
			}
			$reserva->flights[$i]->connection[0]->route=$datosPNRRadixx->lVuelos[$i]->origen."-".$datosPNRRadixx->lVuelos[$i]->destino;
			if($datosPNRRadixx->lVuelos[$i]->fechaSalida!=$reserva->flights[$i]->connection[0]->dateTimeDeparture)  //Dominante RADIXX
				$reserva->flights[$i]->connection[0]->dateTimeDeparture=$datosPNRRadixx->lVuelos[$i]->fechaSalida;
			if($datosPNRRadixx->lVuelos[$i]->fechaLlegada!=$reserva->flights[$i]->connection[0]->dateTimeArrival)  //Dominante RADIXX
				$reserva->flights[$i]->connection[0]->dateTimeArrival=$datosPNRRadixx->lVuelos[$i]->fechaLlegada;
			if($flagCambOrgDes){
				$inputGetFligth->airline = "";
				$inputGetFligth->origin=$reserva->flights[$i]->connection[0]->airportOriginName;
				$inputGetFligth->destination=$reserva->flights[$i]->connection[0]->airportDestinationName;
				$inputGetFligth->departureDate=convFecha($reserva->flights[$i]->connection[0]->dateTimeDeparture);
				$inputGetFligth->returnDate=convFecha($reserva->flights[$i]->connection[0]->dateTimeArrival);//"2014-08-31-04:00";
				$inputGetFligth->fligthType=$reserva->return; //1 Return
				$respuNum=numeroPasa($reserva->flights[$i]->validReturn);
				$inputGetFligth->nAdults=$respuNum["ADT"];
				$inputGetFligth->nChild=$respuNum["CHD"];
				$inputGetFligth->nInfant=$respuNum["INF"];
				$inputGetFligth->cabinClass=0;
				$inputGetFligth->criteria=1;//0 por aerolinea 1 por precio
				$inputGetFligth->gcp=$GCP;
				$inputGetFligth->usuario=$Usuario;
				
				$cliente = new SoapClient('http://192.168.0.222/radixx/cts/RadixxBackend.wsdl',array( 'trace' => 1,'cache_wsdl' => WSDL_CACHE_NONE, 'features' => SOAP_SINGLE_ELEMENT_ARRAYS|SOAP_USE_XSI_ARRAY_TYPE));
				$respGetFligths = $cliente->getFligths((object)$inputGetFligth);
				$nroVUE=$reserva->flights[$i]->connection[0]->fligthNumber;
				$origen=trim($reserva->flights[$i]->connection[0]->airportOriginCode);
				$nvoVuelo=buscaVuelo($respGetFligths,$nroVUE,$origen);//Para buscar el vuelo se busca el vuelo y el origen
				if(count($nvoVuelo)>0){
					$reserva->flights[$i]=$nvoVuelo;
					echo "<pre>";
					print_r($nvoVuelo);
					echo "</pre>";
				}
			}
			if($datosPNRRadixx->lPasajeros[$i]->clase!=$reserva->flights[$i]->connection[0]->cabinClass)  //Dominante RADIXX
				$reserva->flights[$i]->connection[0]->cabinClass = $datosPNRRadixx->lPasajeros[$i]->clase;
		}
		$maxPas=count($reserva->passangers)-1;
		for($j=0;$j<=$maxPas;$j++){
			if($datosPNRRadixx->lPasajeros[$j]->nombre!=$reserva->passangers[$j]->name)  //Dominante RADIXX
				$reserva->passangers[$j]->name = ucfirst(strtolower($datosPNRRadixx->lPasajeros[$j]->nombre));
			if($datosPNRRadixx->lPasajeros[$j]->apellido!=$reserva->passangers[$j]->lastName)  //Dominante RADIXX
				$reserva->passangers[$j]->lastName =  ucfirst(strtolower($datosPNRRadixx->lPasajeros[$j]->apellido));
			if($datosPNRRadixx->lPasajeros[$j]->tipo!=$reserva->passangers[$j]->type)  //Dominante RADIXX
				$reserva->passangers[$j]->type =  $datosPNRRadixx->lPasajeros[$j]->tipo;
		}
	}
	return $reserva;
}

function convFecha($fecha){
	$date=explode("T",$fecha);
	$newDate=$date[0]."-04:00";
	return $newDate;			
}

function numeroPasa($tarifas){
	foreach ($tarifas as $key => $value){
		if(!(strpos($value, "ADT") == false ))
			$resp["ADT"]++;
		if(!(strpos($value, "CHD") == false ))
			$resp["CHD"]++;
		if(!(strpos($value, "INF") == false ))
			$resp["INF"]++;
	}
	return $resp;
}

function buscaVuelo($respGetFligths,$nroVuelo,$origen){
	for($i=0;$i<count($respGetFligths->flights);$i++){
		if(($respGetFligths->flights[$i]->connection[0]->fligthNumber==$nroVuelo) && ($respGetFligths->flights[$i]->connection[0]->airportOriginCode==$origen))
			$nvoVuelo=$respGetFligths->flights[$i];
	}
	return $nvoVuelo;
}
//$response=getFligths($inputGetFligth);
//echo "<pre>RESPUESTA";
//print_r($inputGetFligth);
//echo "</pre>";
//$nump ="VLZHXH";// "MVPK7X";
$input->numeroReserva = "BQA0E1";//"MESEPV";
buscarReserva($input);
?>
